/** * Returns the median of an array of numbers. * * @param {number[]} numbers - Array of numbers to evaluate. * @returns {number|undefined} The median value, or undefined for invalid inputs or empty array. */ export function median(numbers) { // Validate that the input is an array if (!Array.isArray(numbers)) return undefined; const len = numbers.length; if (len === 0) return undefined; // Ensure every element is a finite number for (const n of numbers) { if (typeof n !== "number" || !Number.isFinite(n)) return undefined; } // Create a sorted copy (ascending) const sorted = [...numbers].sort((a, b) => a - b); const middle = Math.floor(len / 2); if (len % 2 === 1) { // Odd length – return the middle element return sorted[middle]; } else { // Even length – return the average of the two middle elements return (sorted[middle - 1] + sorted[middle]) / 2; } }